Estoy tratando de ejecutar una aplicación asíncrona de python con un trabajo programado de asyncioscheduler, pero APScheduler falla durante la compilación debido a este error:
Error "Solo se admiten las zonas horarias de la biblioteca pytz"
Incluyo pytz en mi aplicación y estoy pasando la zona horaria. ¿Qué está causando el error?
Estoy llamando al asyncioscheduler en una clase donde creo un administrador de trabajos:
from apscheduler.schedulers.asyncio import AsyncIOScheduler class ScheduleManager: def __init__(self) -> None: self.scheduler = AsyncIOScheduler() def start(self): self.scheduler.start() def stop(self): self.scheduler.shutdown() def add_seconds_interval_job(self, callback, interval : int): self.scheduler.add_job(callback, 'interval', seconds = interval) def add_minutes_interval_job(self, callback, interval : int): self.scheduler.add_job(callback, 'interval', minutes = interval) def add_hours_interval_job(self, callback, interval : int): self.scheduler.add_job(callback, 'interval', hours = interval) def add_days_interval_job(self, callback, interval : int): self.scheduler.add_job(callback, 'interval', days = interval)luego llamo a este administrador desde mi aplicación como:
from jobs import ScheduleManager, ConfigJob class AppInitializer: def __init__(self) -> None: self.schedule_manager = ScheduleManager() self.config__job = ConfigJob() async def initialize(self, app, loop): self.schedule_manager.add_seconds_interval_job(self.config_job.run, 5) self.schedule_manager.start()Ok, requería una dependencia tzlocal==2.1 para que pudiera obtener la zona horaria local, supongo que por alguna razón la versión que tiene el módulo no funciona en mi sistema
La biblioteca tzlocal cambió de pytz a zoneinfo timezones en 3.0 y APScheduler 3.x no es compatible con ellos. Debido a esto, APScheduler 3.7.0 tiene tzlocal anclado a v2.x. Si está instalando tzlocal 3.0 a través de APScheduler, está usando una versión anterior. Actualice.
Me tropecé con esto también. Y ahora hay una nueva versión de tzlocal (4.1) que en realidad no es compatible con apscheduler 3.x que no se maneja en la fijación: apscheduler 3.8.1 requires tzlocal!=3.*,>=2.0 Esto rompe las cosas si tiene tzlocal==4.1 instalado. tzlocal ahora manualmente en mis requisitos.yml:
tzlocal<3.0 o más específico tzlocal==2.1
Actualización: los documentos de apscheduler indican que este problema se solucionó con 3.8.1 y con 3.9.0 ya no aplican las zonas horarias de pytz. Después de algunas pruebas con diferentes versiones, sigo teniendo los mismos errores con Python 3.10.2, apscheduler 3.8.1/3.9.0 y tzlocal 4.0/4.1. Me veo obligado a usar tzlocal<3.0.